import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path, { resolve } from 'path'

const port = 80

// https://vitejs.dev/config/
export default defineConfig({
  root: process.cwd(),
  base: '/',
  plugins: [vue()],
  publicDir: 'public',
  cacheDir: ".vite",
  resolve: {
    alias: {
      "@": path.resolve(__dirname, 'src'),
      "~": path.resolve(__dirname, 'src/assets')
    },
    dedupe: ['lodash'],
    conditions: ['es2015', 'module', 'browser'],
    extensions: ['.mjs', '.js', '.mts', '.ts', '.jsx', '.tsx', '.json'],
    preserveSymlinks: false
  },
  css: {
    modules: true,
  },
  server: {
    host: '0.0.0.0',
    port: port,
    mode: 'development', // 环境变量模式，将会把 serve 和 build 时的模式 都 覆盖掉。
    strictPort: true, // 端口被占用直接退出
    open: false,
    https: false, // 启用TLS + http/2
    proxy: {
      'api/': {

      }
    }, // 配置代理规则
    cors: true, // 为开发服务器配置 CORS,默认启用
    headers: {}, // 指定服务器响应的header
    hmr: {}, // 禁用或配置 HMR 连接
    middlewareMode: false, // 以中间件模式创建 Vite 服务器。
    //origin: `http://127.0.0.1:${port}`, // 用于定义开发调试阶段生成资源的 origin。
    // 是否忽略服务器 sourcemap 中的源文件，这是默认值，它将把所有路径中含有 node_modules 的文件添加到忽略列表中。
    sourcemapIgnoreList(sourcePath, sourcemapPath) {
      return sourcePath.includes('node_modules')
    },
    watch: {
      ignored: ['!**/node_modules/vue/**'], // 被监听的包必须被排除在优化之外，以便它能出现在依赖关系图中并触发热更新。
    },
    fs: {
      strict: true, // 限制为工作区 root 路径以外的文件的访问。
      allow: ['..'], // 限制哪些文件可以通过 /@fs/ 路径提供服务。设置为 true 时，访问这个目录列表外的文件将会返回 403 结果。
      deny: ['.env', '.env.*', '*.{crt,pem}'], // 用于限制 Vite 开发服务器提供敏感文件的黑名单。比 fs.allow 更高级
    }
  },

  build: {
    target: 'modules', // 设置最终构建的浏览器兼容目标。
    outDir: 'results', // 指定输出路径
    assetsDir: 'assets', // 指定生成静态资源的存放路径,相对于outDir
    assetsInlineLimit: 4096,// 小于此阈值的导入或引用资源将内联为 base64 编码，以避免额外的 http 请求。
    cssCodeSplit: true, // 启用/禁用 CSS 代码拆分。
    sourcemap: false, // 是否生成map文件
    reportCompressedSize: true, //  gzip 压缩大小报告。
    chunkSizeWarningLimit: 500, //规定触发警告的 chunk 大小。（以 kbs 为单位）。
    terserOptions: {
      compress: {
        drop_console: true, // 生产环境下去除console
        drop_debugger: true, // 生产环境下去除debugger
      }
    },
    rollupOptions: {
      input: {
        main: resolve(__dirname, 'index.html') // 入口，改入口可以配置多个，可以实现多页面
      },
      output: {
        // 自定意代码分块
        manualChunks: {
          vue: ["vue"],
        },
        chunkFileNames: 'static/js/[name]-[hash].js',
        entryFileNames: 'static/js/[name]-[hash].js',
        assetFileNames: 'static/[ext]/[name]-[hash].[ext]'
      }
    }
  }
})
